use regex::Regex;
use std::ffi::OsStr;

pub fn chinese_to_number(s: &str) -> Option<i64> {
    match s {
        "一" => Some(1),
        "二" => Some(2),
        "三" => Some(3),
        "四" => Some(4),
        "五" => Some(5),
        "六" => Some(6),
        "七" => Some(7),
        "八" => Some(8),
        "九" => Some(9),
        "十" => Some(10),
        "百" => Some(100),
        "千" => Some(1000),
        "两" => Some(2),
        "半" => Some(1), // 可按 0.5 处理，但 NaiveDateTime 不支持浮动时间
        _ => s.parse::<i64>().ok(),
    }
}

pub fn os_str_to_string(os_str: &OsStr) -> Option<String> {
    os_str.to_str().map(String::from)
}

pub fn detect_by_content(code: &str) -> &'static str {
    let t = code.trim();

    // HTML 检测: 以标签开头
    if Regex::new(r"^(?i)<(!doctype|html|head|body|div|span|script|style|[a-z]+\s)")
        .unwrap()
        .is_match(t)
    {
        return "html";
    }

    // XML 检测: 以 <?xml 开头或自定义标签
    if Regex::new(r"^<\?xml\s").unwrap().is_match(t)
        || (Regex::new(r"^<([a-zA-Z0-9]+)(\s|>)").unwrap().is_match(t)
            && !Regex::new(r"(?i)^<(html|head|body|div|span|script|style)")
                .unwrap()
                .is_match(t))
    {
        return "xml";
    }

    // JSON 检测: 以 { } 或 [ ] 包裹
    if Regex::new(r"^(\{[\s\S]*\}|\[[\s\S]*\])$")
        .unwrap()
        .is_match(t)
    {
        return "json";
    }

    // YAML 检测: 不以 < 开头且包含 YAML 特征
    if !t.starts_with('<')
        && (Regex::new(r"^---").unwrap().is_match(t)
            || Regex::new(r"(?m)^[\w\-]+\s*:\s*.+").unwrap().is_match(t))
    {
        return "yaml";
    }

    // Markdown 检测: 标题或链接
    if Regex::new(r"(?m)^#+\s+").unwrap().is_match(t)
        || Regex::new(r"\[[^\]]+\]\([^)]+\)").unwrap().is_match(t)
    {
        return "markdown";
    }

    // JavaScript 检测: 分号结尾或 function 关键字
    if Regex::new(r";\s*$").unwrap().is_match(t) || Regex::new(r"\bfunction\b").unwrap().is_match(t)
    {
        return "javascript";
    }

    // TypeScript 检测: 类型声明或 interface 关键字
    if Regex::new(r":\s*string\b").unwrap().is_match(t)
        || Regex::new(r"\binterface\b").unwrap().is_match(t)
    {
        return "typescript";
    }

    // CSS 检测: 选择器 + 样式块
    if Regex::new(r"^[\w-]+\s*\{[\s\S]*\}").unwrap().is_match(t) {
        return "css";
    }

    // 默认回退
    "javascript"
}
